Clojure中Transducer的julia实现, 高效的函数式编程,要理解Transducer, 需要先理解函数式编程的基本概念。
先来一个直观的例子感受一下Transducers的优势:
可见, 合理应用Transducer进行函数式编程,可以有效减少内存占用、GC时间等, 提高效率。
reducible
: 可以适用reduce操作的数据;
transducer
: reduce之前对数据进行处理的函数[集合], 称为变换函数xf
, 可以分为两种:
bottom
: reducing函数, 有时也叫step
或op
;
transducible process
: 组配整个过程的高阶函数;
eduction
: Transducer中的reducible对象, 适配foldl等函数从而提升效率;
Inner transducer
: 给定rf = xf1' ∘ xf2'
, xf2
是rf
的内部transducer。
Executor
: 执行器, 指定transducer的执行机制, 如SequentialEx, ThreadedEx, DistributedEx
等, 通常不需要手动配置。
还是用一个例子来证明:
二者最大的区别, 是transducer的xf组合发生在计算阶段, 而iterator的组合发生在输入阶段, 把二者的代码分别转换成更低级代码为: